package moonstruckdrops.dao;

import java.util.ArrayList;
import java.util.List;

import javax.jdo.JDOException;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;

import moonstruckdrops.dao.PMF;
import moonstruckdrops.dto.ProfileDto;

public class ProfileDao {

	/**
	 * データの保存
	 * @param profile　作成したプロフィール
	 */
	public void SaveProfile(ProfileDto profile){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Transaction transaction = pm.currentTransaction();
		transaction.begin();
		try{
			pm.makePersistent(profile);
			transaction.commit();
		}finally{
			if (transaction.isActive()) {
				transaction.rollback();
			}
			pm.close();
		}
	}
	
	/**
	 * データストアからプロフィールの取得
	 * @return　プロフィール
	 */
	public List<ProfileDto> list(){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<ProfileDto> result;
		ArrayList<ProfileDto> ProfileData=new ArrayList<ProfileDto>();
		try{
			Query query = pm.newQuery(ProfileDto.class);
			result = (List<ProfileDto>)query.execute();
			pm.detachCopyAll(result);
		}finally{
			pm.close();
		}
		if(result.isEmpty()!=true){
			for(ProfileDto list:result){
				ProfileData.add(new ProfileDto(list.getId(),list.getBlogTitle(),list.getBlogComent(),list.getBlogAuthor(),list.getBlogAuthorProfile()));
			}
		}else{
			ProfileData.add(new ProfileDto());
		}
		return ProfileData;
	}
	
	/**
	 * データストアからプロフィールの取得
	 * @param first 初期
	 * @param count　個数
	 * @return　プロフィール
	 */
	public List<ProfileDto> getProfile(int first,int count){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<ProfileDto> result;
		ArrayList<ProfileDto> ProfileData=new ArrayList<ProfileDto>();
		long end=first+count;
		try{
			Query query = pm.newQuery(ProfileDto.class);
			query.setOrdering("id desc");
			query.setRange(first,end);
			result = (List<ProfileDto>)query.execute();
			pm.detachCopyAll(result);
//		}catch (JDOException e) {
//			result=null;
		}finally{
			pm.close();
		}
		if(result.isEmpty()!=true){
			for(ProfileDto list:result){
				ProfileData.add(new ProfileDto(list.getId(),list.getBlogTitle(),list.getBlogComent(),list.getBlogAuthor(),list.getBlogAuthorProfile()));
			}
		}else{
			ProfileData.add(new ProfileDto());
		}
		return ProfileData;
	}
	
	/**
	 * プロフィールリストのサイズ
	 * @return　リストのサイズ
	 */
	public int ProfleSize(){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<ProfileDto> result;
		try{
			Query query = pm.newQuery(ProfileDto.class);
			result = (List<ProfileDto>)query.execute();
			pm.detachCopyAll(result);
		}catch (JDOException e) {
			result=null;
		}finally{
			pm.close();
		}
		return result.size();
	}
	
	/**
	 * プロフィールの更新
	 * @param newData　更新内容
	 * @param key　更新先
	 */
	public void upDate(String newData,Object key){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Transaction transaction = pm.currentTransaction();
		transaction.begin();
		try{
			transaction.commit();
		}finally{
			if (transaction.isActive()) {
				transaction.rollback();
			}
		}
	}
}
